home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / xnot12a.zip / CINFO.C < prev    next >
C/C++ Source or Header  |  1993-05-20  |  4KB  |  174 lines

  1. #include "jam.h"
  2. /*
  3.  *        Character class tables.
  4.  * Do it yourself character classification
  5.  * macros, that understand the multinational character set,
  6.  * and let me ask some questions the standard macros (in
  7.  * ctype.h) don't let you ask.
  8.  */
  9. #include    "def.h"
  10.  
  11. /*
  12.  * This table, indexed by a character drawn
  13.  * from the 256 member character set, is used by my
  14.  * own character type macros to answer questions about the
  15.  * type of a character. It handles the full multinational
  16.  * character set, and lets me ask some questions that the
  17.  * standard "ctype" macros cannot ask.
  18.  */
  19. #ifndef SOL_0
  20. static char cinfo[256] = {
  21.     _C,        _C,        _C,        _C,    /* 0x0X */
  22.     _C,        _C,        _C,        _C,
  23.     _C,        _C,        _C,        _C,
  24.     _C,        _C,        _C,        _C,
  25.     _C,        _C,        _C,        _C,    /* 0x1X */
  26.     _C,        _C,        _C,        _C,
  27.     _C,        _C,        _C,        _C,
  28.     _C,        _C,        _C,        _C,
  29.     0,        _P,        0,        0,    /* 0x2X */
  30.     _W,        _W,        0,        _W,
  31.     0,        0,        0,        0,
  32.     0,        0,        _P,        0,
  33.     _D|_W,        _D|_W,        _D|_W,        _D|_W,    /* 0x3X */
  34.     _D|_W,        _D|_W,        _D|_W,        _D|_W,
  35.     _D|_W,        _D|_W,        0,        0,
  36.     0,        0,        0,        _P,
  37.     0,        _U|_W,        _U|_W,        _U|_W,    /* 0x4X */
  38.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  39.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  40.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  41.     _U|_W,        _U|_W,        _U|_W,        _U|_W,    /* 0x5X */
  42.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  43.     _U|_W,        _U|_W,        _U|_W,        0,
  44.     0,        0,        0,        0,
  45.     0,        _L|_W,        _L|_W,        _L|_W,    /* 0x6X */
  46.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  47.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  48.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  49.     _L|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0x7X */
  50.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  51.     _L|_W,        _L|_W,        _L|_W,        0,
  52.     0,        0,        0,        0,
  53.     _W,        _W,        _W,        _W,    /* 0x8X */
  54.     _W,        _W,        _W,        _W,
  55.     _W,        _W,        _W,        _W,
  56.     _W,        _W,        _W,        _W,
  57.     _W,        _W,        _W,        _W,    /* 0x9X */
  58.     _W,        _W,        _W,        _W,
  59.     _W,        _W,        _W,        0,
  60.     0,        0,        0,        0,
  61.     _W,        _W,        _W,        _W,    /* 0xAX */
  62.     _W,        _W,        _W,        _W,
  63.     0,        0,        0,        0,
  64.     0,        0,        0,        0,
  65.     0,        0,        0,        0,    /* 0xBX */
  66.     0,        0,        0,        0,
  67.     0,        0,        0,        0,
  68.     0,        0,        0,        0,
  69.     0,        0,        0,        0,    /* 0xCX */
  70.     0,        0,        0,        0,
  71.     0,        0,        0,        0,
  72.     0,        0,        0,        0,
  73.     0,        0,        0,        0,    /* 0xDX */
  74.     0,        0,        0,        0,
  75.     0,        0,        0,        0,
  76.     0,        0,        0,        0,
  77.     0,        0,        0,        0,    /* 0xEX */
  78.     0,        0,        0,        0,
  79.     0,        0,        0,        0,
  80.     0,        0,        0,        0,
  81.     0,        0,        0,        0,    /* 0xFX */
  82.     0,        0,        0,        0,
  83.     0,        0,        0,        0,
  84.     0,        0,        0,        0,
  85. };
  86. #endif
  87.  
  88. /* I like my stuff static; use this access func. (JAM)
  89. */
  90. #ifndef SOL_0
  91. char getcinfo(c)
  92. int c;
  93. {
  94.   return(cinfo[c]);
  95. }
  96. #endif
  97.  
  98. /*
  99.  * Find the name of a keystroke.  Needs to be changed to handle 8-bit printing
  100.  * characters and function keys better.     Returns a pointer to the terminating
  101.  * '\0'.
  102.  */
  103.  
  104. char *mykeyname(cp, k)
  105. register char *cp;
  106. register int k;
  107. {
  108.     register char *np = "unknown key";
  109.  
  110.     if (k < 0) 
  111.       k = CHARMASK(k);            /* sign extended char */
  112.  
  113.     switch(k) {
  114.     case CCHR('@'): 
  115.           np = "NUL"; 
  116.           break;
  117.     case CCHR('I'): 
  118.           np = "TAB"; 
  119.           break;
  120.         case CCHR('J'): 
  121.           np = "LFD"; 
  122.           break; /* yuck, but that's what GNU calls it */
  123.     case CCHR('M'): 
  124.           np = "RET"; 
  125.           break;
  126.         case CCHR('['): 
  127.           np = "ESC"; 
  128.           break;
  129.     case ' ':    
  130.           np = "SPC"; 
  131.           break; /* yuck again */
  132.     case CCHR('?'): 
  133.           np = "DEL"; 
  134.           break;
  135.     default:
  136.  
  137.         if(k >= KFIRST && k <= KLAST &&
  138.             (np = (char *)getkeystrings(k - KFIRST)) != NULL)
  139.         break;
  140.  
  141.         if(k > CCHR('?')) {
  142.         *cp++ = '0';
  143.         *cp++ = (char)(((k>>6)&7) + '0');
  144.         *cp++ = (char)(((k>>3)&7) + '0');
  145.         *cp++ = (char)((k&7) + '0');
  146.         *cp = '\0';
  147.         return cp;
  148.         }
  149.         if(k < ' ') {
  150.         *cp++ = 'C';
  151.         *cp++ = '-';
  152.         k = CCHR(k);
  153.         if(ISUPPER(k)) 
  154.            k = TOLOWER(k);
  155.         }
  156.         *cp++ = (char)k;
  157.         *cp = '\0';
  158.         return cp;
  159.     }
  160.     (VOID) strcpy(cp, np);
  161.     return cp + strlen(cp);
  162. }
  163.  
  164. findkeyfromstring(p)
  165. char *p;
  166. {
  167.     int i = KFIRST;
  168.  
  169.     for (i = KFIRST; i <= KLAST; i++)
  170.       if (strcmp(p, getkeystrings(i - KFIRST)) == 0)
  171.       return(i);
  172.     return(-1);
  173. }
  174.